qutebrowser 脚本注入
在 Qutebrowser 中,打开新页面时,浏览器会向页面中注入 JavaScript 脚本和 CSS。注入的内容包括:quirks(对某些网站的修复脚本),css(自定义主题),Greasemonkey 脚本……
在本文中梳理脚本注入的过程。Qutebrowser 同时包括 QtWebkit 和 QWebEngine 实现,这里以后者作为分析。
打开新页面,实际指的是创建新的 WebEngineTab 实例。该类通过一个内部类 _WebEngineScripts
管理脚本注入。
WebEngineTab 在构造函数中就开始注入,调用 _WebEngineScripts
的 init 方法:
def init(self):
"""Initialize global qutebrowser JavaScript."""
js_code = javascript.wrap_global(
'scripts',
resources.read_file('javascript/scroll.js'),
resources.read_file('javascript/webelem.js'),
resources.read_file('javascript/caret.js'),
)
# FIXME:qtwebengine what about subframes=True?
self._inject_js('js', js_code, subframes=True)
self._init_stylesheet()
self._greasemonkey.scripts_reloaded.connect(
self._inject_all_greasemonkey_scripts)
self._inject_all_greasemonkey_scripts()
self._inject_site_specific_quirks()
其中,分为几个过程:
- 注入 qutebrowser 的 JavaScript 脚本,这些脚本用于浏览器与页面进行交互
- 这里原作者也对为什么开一个 subframes 有疑问
- 注入 CSS,通过
shared.get_user_stylesheet()
获取用户样式表,通过javascript/stylesheet.js
脚本实现注入 - 注入 greasemonkey 脚本
- 同时绑定一个信号槽,greasemonkey 自动重新加载
- greasemonkey 脚本由 GreasemonkeyManager 类负责
- 注入 quirks 修复脚本
本文作者:Maeiee
本文链接:qutebrowser 脚本注入
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!